#pragma once
#include "Common.h"


class ThreadCache {
public:
	void* Allocate(size_t size);

	void Deallocate(void *ptr, size_t size);

	// 从中心缓存获取
	void* FetchFromCentralCache(size_t index, size_t size);

	size_t& MaxSize()
	{
		return _maxSize;
	}

	void ListTooLong(FreeList& list, size_t size);

private:
	size_t _maxSize = 1;
	FreeList _freeLists[NFREELIST];
};


// TLS Thread Local Storage  线程本地存储, 确保每个线程有一个独立变量，从而保证threadCache不用考虑锁
static _declspec(thread) ThreadCache* pTLSThreadCache = nullptr;
// TLS变量是在 线程内 被使用和访问的，但它的声明通常是在全局作用域或局部作用域中
//每个线程都会有一个名为 tlsVariable 的独立副本，线程 A、线程 B 等访问时，它们不会互相影响。